class OpenDataUtil {
	public constructor() {
	}
    /**
     * @param data: 发送给共享数据域的数据
     * data里需要有以下几个必要参数：
     *      uiIndex：当前页面的index
     *      status：发送的操作命令GameConfig.shareCavansCommand.xx
     *        mine：当前玩家的信息
     */
    public static postMessage(data:any)
    {
        if(data && data["status"]){
            // 添加默认参数
            if(!data["mine"]){
                data["mine"] = UserData.getMineOpenData();
            }
            if(!data["gameName"]){
                data["gameName"] = GameConfig.gameName;
            }
        }
        // 不能使用开放数据源的低版本不处理
        if (!GameConfig.showRank) return;
        // 发送数据
        let openDataContext = wx.getOpenDataContext();
        openDataContext.postMessage(data);
    }
    public static postPageIndex(index:number)
    {
        // 不能使用开放数据源的低版本不处理
        if (!GameConfig.showRank) return;
        // 发送数据
        let openDataContext = wx.getOpenDataContext();
        openDataContext.postMessage({
            status: GameConfig.shareCavansCommand.UPDATE_INDEX,
            uiIndex: index
        });
    }

    public static showRank(scene:egret.DisplayObjectContainer,data:any)
    {
        if(data){
            // 添加默参数
            if(!data["status"]){
                data["status"] = GameConfig.shareCavansCommand.SHOW_RANK;
            }
        }
        
        // 不让展示排行榜的版本不处理
        if (!GameConfig.showRank){
            return;
        }
        // 渲染共享数据域的内容到当前scene上
        if(!scene["renderRank"])
        {
            scene["renderRank"] = function(timeStarmp: number) {
                egret.WebGLUtils.deleteWebGLTexture(scene["bitmapdata"].webGLTexture);
                scene["bitmapdata"].webGLTexture = null;
                return false;
            }
	    }
        // 清空之前的展示数据
        OpenDataUtil.cancleRank(scene);
        // 加载排行榜数据
		OpenDataUtil.getRankData(data);
        // 展示排行榜数据
		OpenDataUtil.addRankToScene(scene);
    }
    /**
     * 向共享数据域发送指令请求排行榜数据
     */
    public static getRankData(data:any)
    {
        OpenDataUtil.postMessage(data);
    }
    /**
     * 将共享数据域内容加载到当前scene上
     */
    public static addRankToScene(scene:egret.DisplayObjectContainer)
    {
        var bitmapdata = new egret.BitmapData(window["sharedCanvas"]);
        // 定时器不断render到scene上时用
        scene["bitmapdata"] = bitmapdata;
		bitmapdata.$deleteSource = false;
		var texture = new egret.Texture();
		texture._setBitmapData(bitmapdata);
		var bitmap  = new egret.Bitmap(texture);
        // 在清空取消展示排行榜时会用到
        scene["bitmap"] = bitmap;
		bitmap.width = GameConfig.stageWidth;
		bitmap.height = GameConfig.stageHeight;
		scene.addChild(bitmap);
        egret.startTick(scene["renderRank"], scene);
    }
    /**
     * 取消展示排行
     */
    public static cancleRank(scene:egret.DisplayObjectContainer)
    {   
        // 不让展示排行榜的版本不处理
        if (!GameConfig.showRank){
            return;
        }
        // 删除展示排行榜的定时器
        if(scene["renderRank"]){
            egret.stopTick(scene["renderRank"], scene);
        }
        // 删除展示排行榜的bitmap
		OpenDataUtil.cleanBitmap(scene);
        // 向共享数据域发指令清空数据
		OpenDataUtil.cleanOpenDataContext();
    }
    /**
     * 将显示共享数据域的内容的bitmap清空移除
     */
    public static cleanBitmap(scene:egret.DisplayObjectContainer) {
        let bitmap:egret.Bitmap = scene["bitmap"];
        if (bitmap && bitmap.parent) {
			bitmap.parent.removeChild(bitmap);
			scene["bitmap"] = null;
		}
	}
    /**
     * 向共享数据域发指令清空数据
     */
    public static cleanOpenDataContext() {
		OpenDataUtil.postMessage({
			status: GameConfig.shareCavansCommand.CLEAN_RANK,
			uiIndex: GameConfig.uiIndex.clean
		});
	}
}